home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / libg_261.zip / libg_261 / libg++ / gperf / tests / test-1.exp < prev    next >
Text File  |  1992-12-21  |  4KB  |  140 lines

  1. /* C code produced by gperf version 2.5 (GNU C++ version) */
  2. /* Command-line: ../src/gperf -p -j1 -g -o -t -N is_reserved_word -k1,3,$  */
  3. /* Command-line: gperf -p -j1 -i 1 -g -o -t -N is_reserved_word -k1,3,$ c-parse.gperf  */ 
  4. struct resword { char *name; short token; enum rid rid; };
  5.  
  6. #define TOTAL_KEYWORDS 51
  7. #define MIN_WORD_LENGTH 2
  8. #define MAX_WORD_LENGTH 13
  9. #define MIN_HASH_VALUE 8
  10. #define MAX_HASH_VALUE 82
  11. /* maximum key range = 75, duplicates = 0 */
  12.  
  13. #ifdef __GNUC__
  14. inline
  15. #endif
  16. static unsigned int
  17. hash (str, len)
  18.      register char *str;
  19.      register int unsigned len;
  20. {
  21.   static unsigned char asso_values[] =
  22.     {
  23.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  24.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  25.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  26.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  27.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  28.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  29.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  30.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  31.      83, 83, 83, 83, 83, 83, 83, 83, 83, 83,
  32.      83, 83, 83, 83, 83,  0, 83,  1,  2, 34,
  33.      19,  6, 11, 29,  0, 17, 83,  0, 23, 28,
  34.      26, 30, 31, 83, 15,  1,  0, 28, 13,  4,
  35.      83, 83,  5, 83, 83, 83, 83, 83,
  36.     };
  37.   register int hval = len;
  38.  
  39.   switch (hval)
  40.     {
  41.       default:
  42.       case 3:
  43.         hval += asso_values[str[2]];
  44.       case 2:
  45.       case 1:
  46.         hval += asso_values[str[0]];
  47.     }
  48.   return hval + asso_values[str[len - 1]];
  49. }
  50.  
  51. #ifdef __GNUC__
  52. inline
  53. #endif
  54. struct resword *
  55. is_reserved_word (str, len)
  56.      register char *str;
  57.      register unsigned int len;
  58. {
  59.   static struct resword wordlist[] =
  60.     {
  61.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  62.       {"__asm__",  ASM, NORID},
  63.       {"",}, 
  64.       {"__typeof__",  TYPEOF, NORID},
  65.       {"__signed__",  TYPESPEC, RID_SIGNED},
  66.       {"__alignof__",  ALIGNOF, NORID},
  67.       {"break",  BREAK, NORID},
  68.       {"__attribute__",  ATTRIBUTE, NORID},
  69.       {"",}, {"",}, 
  70.       {"else",  ELSE, NORID},
  71.       {"__attribute",  ATTRIBUTE, NORID},
  72.       {"__typeof",  TYPEOF, NORID},
  73.       {"int",  TYPESPEC, RID_INT},
  74.       {"__alignof",  ALIGNOF, NORID},
  75.       {"struct",  STRUCT, NORID},
  76.       {"sizeof",  SIZEOF, NORID},
  77.       {"switch",  SWITCH, NORID},
  78.       {"__volatile__",  TYPE_QUAL, RID_VOLATILE},
  79.       {"",}, 
  80.       {"__inline__",  SCSPEC, RID_INLINE},
  81.       {"__signed",  TYPESPEC, RID_SIGNED},
  82.       {"__volatile",  TYPE_QUAL, RID_VOLATILE},
  83.       {"if",  IF, NORID},
  84.       {"__inline",  SCSPEC, RID_INLINE},
  85.       {"while",  WHILE, NORID},
  86.       {"",}, 
  87.       {"__asm",  ASM, NORID},
  88.       {"auto",  SCSPEC, RID_AUTO},
  89.       {"short",  TYPESPEC, RID_SHORT},
  90.       {"default",  DEFAULT, NORID},
  91.       {"extern",  SCSPEC, RID_EXTERN},
  92.       {"",}, {"",}, 
  93.       {"__const",  TYPE_QUAL, RID_CONST},
  94.       {"static",  SCSPEC, RID_STATIC},
  95.       {"__const__",  TYPE_QUAL, RID_CONST},
  96.       {"for",  FOR, NORID},
  97.       {"case",  CASE, NORID},
  98.       {"float",  TYPESPEC, RID_FLOAT},
  99.       {"return",  RETURN, NORID},
  100.       {"typeof",  TYPEOF, NORID},
  101.       {"typedef",  SCSPEC, RID_TYPEDEF},
  102.       {"volatile",  TYPE_QUAL, RID_VOLATILE},
  103.       {"do",  DO, NORID},
  104.       {"inline",  SCSPEC, RID_INLINE},
  105.       {"void",  TYPESPEC, RID_VOID},
  106.       {"char",  TYPESPEC, RID_CHAR},
  107.       {"signed",  TYPESPEC, RID_SIGNED},
  108.       {"unsigned",  TYPESPEC, RID_UNSIGNED},
  109.       {"",}, {"",}, 
  110.       {"double",  TYPESPEC, RID_DOUBLE},
  111.       {"asm",  ASM, NORID},
  112.       {"",}, {"",}, 
  113.       {"goto",  GOTO, NORID},
  114.       {"",}, 
  115.       {"const",  TYPE_QUAL, RID_CONST},
  116.       {"enum",  ENUM, NORID},
  117.       {"register",  SCSPEC, RID_REGISTER},
  118.       {"",}, {"",}, {"",}, {"",}, {"",}, {"",}, 
  119.       {"continue",  CONTINUE, NORID},
  120.       {"",}, 
  121.       {"union",  UNION, NORID},
  122.       {"",}, {"",}, {"",}, {"",}, {"",}, 
  123.       {"long",  TYPESPEC, RID_LONG},
  124.     };
  125.  
  126.   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
  127.     {
  128.       register int key = hash (str, len);
  129.  
  130.       if (key <= MAX_HASH_VALUE && key >= 0)
  131.         {
  132.           register char *s = wordlist[key].name;
  133.  
  134.           if (*s == *str && !strcmp (str + 1, s + 1))
  135.             return &wordlist[key];
  136.         }
  137.     }
  138.   return 0;
  139. }
  140.